package com.example.ten.service.impl;

import com.aaa.dao.RoleDao;
import com.aaa.entity.Role;
import com.aaa.service.RoleService;
import com.aaa.util.Page;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author: Jyc
 * @classname: RoleDaoImpl
 * @date: 2023/3/29
 * @time: 10:30
 * @description:
 */
@Service
public class RoleServiceImpl implements RoleService {
    @Resource
    private RoleDao roleDao;

    @Override
    public List<Role> queryAll() {
        return null;
    }

    @Override
    public PageInfo queryByParam(Page<Role> page) {
        //使用PageHelper
        //设置分页页码 pageNo 和每页显示数量 pageSize
        PageHelper.startPage(page.getPageNo(),page.getPageSize());
        //执行后端查询，把查询结果封装为PageInfo并返回
        return new PageInfo<Role>(roleDao.queryByParam(page.getData()));
    }


    @Override
    public Role queryById(int roleId) {
        return null;
    }

    @Override
    public List<Integer> queryMenuIdListByRid(int roleId) {
        return roleDao.queryMenuIdListByRid(roleId);
    }
    //@Transactional
    @Override
    public int deletePosMenuByPosId(int roleId) {
        return roleDao.deletePosMenuByPosId(roleId);
    }

//    @Override
//    public int addPosAndMenu(int posId, int menuId) {
//        return 0;
//    }

    @Transactional //保证该方法中的调用的所有方法一起提交或者一起混滚     spring事务
    @Override
    public int addPosAndMenu(int posId, String menuIds) {
        //1,先调用根据角色批量删除 角色权限关联的方法
        this.deletePosMenuByPosId(posId);
        //2,再添加关联
        //posId = 1   每次一个值 角色/职位编号
        //menuIds = "100,101,102,200,201,300"
        //添加是否成功标识符
        boolean flag = true;
        //判断menuIds是否为空 不为空时，分割，添加
        if(!StringUtils.isEmpty(menuIds)){
            //menuIdArray=[100,101,102,200,201,300]
            String[] menuIdArray = menuIds.split(",");
            for (String menuId : menuIdArray) {
                //第1次 100  第2次 101 .....最后一次 300  valueOf 把数字格式的字符串转数字
                int i = roleDao.addPosAndMenu(posId, Integer.valueOf(menuId));
                if(i<1){
                    flag=false;
                }
            }
        }
        //如果循环添加结束，flag仍然是true说明 全部成功
        if(flag){
            return 0;
        }
        return 1;
    }

}
